package com.lin.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lin.po.UserPO;
import com.lin.vo.AddressVO;
import com.lin.vo.UserVO;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

public interface UserService extends IService<UserPO> {

    /**
     * 动态字段查询入口 --方式一
     * <p>在queriedColumns.properties中设置需要查询的字段, 若不设置默认查询所有</p>
     * @param miniBalance 最低余额条件
     */
    void selectPartialFieldByNameAndBalance(Integer miniBalance)
            throws InvocationTargetException, IllegalAccessException;

    /**
     * 动态字段查询入口 --方式二
     * <p>在queriedColumns.properties中设置需要查询的字段, 若不设置默认查询所有</p>
     * @param miniBalance 最低余额条件
     */
    void queryUsers(Integer miniBalance);

    /**
     * 根据id批量减余额
     */
    void minusBalanceByIds(LambdaQueryWrapper<UserPO> wrapper, Integer balance);
    void minusBalanceByIds(Integer balance);

    /**
     * 根据id批量加余额
     */
    void addBalanceByIds(LambdaQueryWrapper<UserPO> wrapper, Integer balance);
    void addBalanceByIds(Integer balance);

    void deductBalanceById(Integer id, Integer minBalance);

    List<UserPO> queryByCondition(String name, Integer status, Integer minBalance, Integer maxBalance);

    void updateByCondition(Integer id, Integer money);

    UserVO getUserAndAddrById(Long id);

    List<UserVO> getUsersAndAddrByIds(List<Long> ids);
    List<UserVO> getUsersAndAddrByIds2(List<Long> ids);

    /**
     * 根据用户id查询地址信息
     * @param id 用户id
     * @return 用户收货地址列表
     */
    List<AddressVO> queryAddrByUserId(Long id);
}
